"""
python模块：
    1、导入python内置文件或插件的功能
    2、语法格式：
        （1）import 文件名/模块名             // 引入整个模块，通过 模块. 可以访问模块内的类/变量/方法/功能
        （2）import 文件名/模块名 as 别名     // 引入整个模块，通过 别名. 可以访问模块内的类/变量/方法/功能
        （3）from 文件名/模块名 import *      // 引入整个模块的类/变量/方法/功能，可以直接访问模块内的类/变量/方法/功能
        （4）from 文件名/模块名 import 类/变量/方法/功能名    // 引入模块的类/变量/方法/功能，可以直接访问模块内的类/变量/方法/功能
        （5）from 文件名/模块名 import 类/变量/方法/功能名 as 别名     // 引入模块的类/变量/方法/功能，可以直接使用别名访问模块内的类/变量/方法/功能
    （3）一般from 可以省略，直接import引入，as也可以省略
自定义模块：
    1、新建python文件：文件名.py
    2、将自定义的变量，函数，方法，类，写在自定义文件中
    3、通过import引入自定义文件
    4、自定义文件内的 __main__ 变量功能：  使代码只在自身文件中执行，被导入时不会执行
        if __name__ == "__main__":    // 只在自定义文件内执行的语句，若外部引用该文件时，不会执行if判断下的语句
            执行语句
    5、自定义文件内的 __all__ 变量功能：  限制import * 时可以导入的功能
        __all__ = [功能1，功能2]       // 外部导入自定义模块时，使用*导入时只能导入__all__变量列表内的功能

python包：
    1、由多个模块文件 + __init__.py 文件组成的python包，可以将多个模块归为一类，方便使用
    2、创建包的流程：项目右键---新建---python软件包       // 创建成功会自动创建__init__.py文件
    3、可以将__all__变量写在__init__.py文件中，来控制导入的功能
"""

# -----------引入外部自定义包
import my_test_moudle.str_tool as st
from my_test_moudle import str_tool as st    # 导入自定义模块包
import my_test_moudle.file_tool as ft

str1 = "abcdefghijklopq"
result = st.str_reverse(str1)  # 调用外部模块包中的函数
print(f"对str1进行反转输出，结束是：{result}")

f_name = 'm_test.txt'
ft.print_file_info(f_name,'r','UTF-8')    # 调用自定义模块包内的函数
ft.append_to_file(f_name,'\n哈哈哈嗨你好')
ft.print_file_info(f_name,'r','UTF-8')